/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.tvdigital.DAO;

import br.com.tvdigital.model.Administradores;
import br.com.tvdigital.util.ConnectionFactory;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author User
 */
public class AdministradoresDAOImpl implements GenericDAO{

    private Connection conn;

    public AdministradoresDAOImpl() throws Exception {
        try {
            this.conn = ConnectionFactory.getConnection();
            System.out.println("Conectado com sucesso!");
        } catch (Exception ex) {
            throw new Exception(ex.getMessage());
        }
    }
    
    
    @Override 
    public Boolean cadastrar(Object object) {
        PreparedStatement stmt = null;
        Administradores administrador = (Administradores) object;
        String sql = "INSERT INTO administradores(id_pessoa)"
                + "VALUES (?);";
        try {
            stmt = conn.prepareStatement(sql);
            try {
                PessoasDAOImpl daoPessoa = new PessoasDAOImpl();
                stmt.setInt(1, daoPessoa.cadastrarPessoa(administrador));
            } catch (Exception ex) {
                System.out.println("Problemas em PesssoasDAOImpl! Erro: " + ex.getMessage());
            }
            stmt.execute();
            return true;
        } catch (SQLException ex) {
            System.out.println("Problemas ao cadastrar Administrador! Erro: " + ex.getMessage());
            ex.printStackTrace();
            return false;
        } finally {
            try {
                ConnectionFactory.closeConnection(conn, stmt);
            } catch (Exception ex) {
                System.out.println("Problemas ao fechar parâmetros de conexão! Erro: " + ex.getMessage());
                ex.printStackTrace();
            }
        }
    }

    @Override
    public List<Object> listar() {
        PreparedStatement stmt = null;
        ResultSet rs = null;
        List<Object> resultado = new ArrayList<Object>();
        String sql = "select ad.*, p.* from administradores ad inner join pessoas p "
                + "on ad.id_pessoa = p.id_pessoa";
        try{
            stmt = conn.prepareStatement(sql);
            rs = stmt.executeQuery();
            while(rs.next()){
                Administradores administrador = new Administradores();
                administrador.setIdAdministrador(rs.getInt("id_administrador"));
                administrador.setIdPessoa(rs.getInt("id_pessoa"));
                administrador.setNomePessoa(rs.getString("nome_pessoa"));
                administrador.setEmailPessoa(rs.getString("email_pessoa"));
                administrador.setLoginPessoa(rs.getString("login_pessoa"));
                administrador.setSenhaPessoa(rs.getString("senha_pessoa"));
                administrador.setTipoPessoa(rs.getString("tipo_pessoa"));
                
                resultado.add(administrador);
            }
    }catch (Exception ex) {
            System.out.println("Problemas ao listar Administrador! Erro: " + ex.getMessage());
            ex.printStackTrace();
        } finally {
            try {
                ConnectionFactory.closeConnection(conn, stmt, rs);
            } catch (Exception ex) {
                System.out.println("Problemas ao fechar parametros de conexão! Erro: " + ex.getMessage());
                ex.printStackTrace();
            }
        }
        return resultado;
    }

    @Override
    public void excluir(Integer idObject) {
        //nada neste método
    }
    
    public Boolean excluirAdministrador (Integer idPessoa){
        
        PreparedStatement stmt = null;
        String sql = "Delete from administradores where id_pessoa = ?;"
                + "commit;"
                + "delete from pessoas where id_pessoa = ?;";
        try{
            stmt = conn.prepareStatement(sql);
            stmt.setInt(1, idPessoa);
            stmt.setInt(2, idPessoa);
            stmt.executeUpdate();
            return true;
        } catch (Exception ex) {
            System.out.println("Problemas ao excluir Administrador! Erro: " + ex.getMessage());
            ex.printStackTrace();
            return false;
        } finally {
            try {
                ConnectionFactory.closeConnection(conn, stmt);
            } catch (Exception ex) {
                System.out.println("Problemas ao fechar parametros de conexão! Erro: " + ex.getMessage());
                ex.printStackTrace();
            }
        }
    }

    @Override
    public Object carregar(Integer idObjeto) {
        Administradores administrador = null;
        PreparedStatement stmt = null;
        ResultSet rs = null;
        String sql = "select ad.*, p.* from administradores ad inner join pessoas p "
                + "on ad.id_pessoa=p.id_pessoa and p.id_pessoa = ?;";
        try {
            stmt = conn.prepareStatement(sql);
            stmt.setInt(1, idObjeto);
            rs = stmt.executeQuery();
            while (rs.next()){
                administrador = new Administradores();
                administrador.setIdAdministrador(rs.getInt("id_administrador"));
                administrador.setIdPessoa(rs.getInt("id_pessoa"));
                administrador.setNomePessoa(rs.getString("nome_pessoa"));
                administrador.setEmailPessoa(rs.getString("email_pessoa"));
                administrador.setLoginPessoa(rs.getString("login_pessoa"));
                administrador.setSenhaPessoa(rs.getString("senha_pessoa"));
                administrador.setTipoPessoa(rs.getString("tipo_pesssoa")); 
            }
    }catch (Exception ex) {
            System.out.println("Problemas ao carregar Administrador! Erro: " + ex.getMessage());
            ex.printStackTrace();
        } finally {
            try {
                ConnectionFactory.closeConnection(conn, stmt, rs);
            } catch (Exception ex) {
                System.out.println("Problemas ao fechar parametros de conexão! Erro: " + ex.getMessage());
                ex.printStackTrace();
            }
        }
        return administrador;
    }

    @Override
    public Boolean alterar(Object object) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
    
}
